home *** CD-ROM | disk | FTP | other *** search
/ Euroscene 2 / Euroscene 2.iso / USEFUL / DeliTracker130 / Developer / Developer.run / Examples / NP3v120.asm < prev    next >
Encoding:
Assembly Source File  |  1992-09-23  |  11.1 KB  |  601 lines

  1. **
  2. **    Noisepacker 3.x playroutine for DeliTracker 1.21+
  3. **    Made for DT by Kevin Dackiw
  4. **    Use Macro 68 for assembly
  5. **
  6. **    If you have any comments or make any changes to the code,
  7. **    please contact me!
  8. **
  9. **    EMail:    kevind@ersys.edmonton.ab.ca
  10. **        sikorsky@bode.ee.ualberta.ca
  11. **
  12. **    to do:    add <<,>> support
  13. **        fix songend detection logic
  14. **
  15. **    bugs: none that I know of
  16. **
  17. **    History:
  18. **
  19. **    v1.00    Initial release.
  20. **    v1.10    Added support for songend detection.
  21. **        Streamlined the interface.
  22. **        Note that it DOESN'T look for NPAK0003 headers now!
  23. **    v1.20    Fixed up check routine.
  24. **        Removed player's ability to change filter.
  25. **        Optimized volume/balance code.
  26. **        * Thanks to Peter for suggestions!...8-) *
  27. **
  28.     section NP3_player,code
  29.  
  30.     newsyntax
  31. *    strict
  32. *    debug
  33. *    addsym
  34.     objfile    'ram:npacker3'
  35.     errfile    'ram:errorfile'
  36.     normobj
  37. *    smallobj
  38.     exeobj
  39.     incdir    'includes:'
  40.     include    'misc/deliplayer.i'
  41.  
  42. start    PLAYERHEADER functions
  43.  
  44. version    dc.b    '$VER: NoisePacker_3 player module v1.20 '
  45.     doscmd    'libdate >t:d1'
  46.     incbin    't:d1'
  47.     dc.b    $D,0
  48.  
  49.     dc.b    'Assembled: '
  50.     doscmd    'date >t:d2'
  51.     incbin    't:d2'
  52.     dc.b    $D,0
  53.  
  54.     cnop    0,4    ;next long for 68030 speed   8-)
  55.  
  56. functions    dc.l    DTP_PlayerVersion,3
  57.     dc.l    DTP_PlayerName,playername
  58.     dc.l    DTP_Creator,creator
  59.     dc.l    DTP_Check2,checkmod
  60.     dc.l    DTP_Interrupt,interrupt
  61.     dc.l    DTP_InitPlayer,initplayer
  62.     dc.l    DTP_EndPlayer,endplayer
  63.     dc.l    DTP_InitSound,initsound
  64.     dc.l    DTP_EndSound,endsound
  65.     dc.l    DTP_Volume,volume
  66.     dc.l    DTP_Balance,balance
  67.     dc.l    TAG_DONE
  68.  
  69. playername    dc.b    'NoisePacker_3.x',0
  70. creator    dc.b    'Original code by Phenomena;',$A
  71.     dc.b    'Adapted by Kevin Dackiw',0
  72.  
  73.     cnop    0,4
  74.  
  75. checkmod    movea.l    (dtg_ChkData,a5),a0
  76.     moveq    #0,d0
  77.     moveq    #0,d1            ;check module format
  78.     movea.l    a0,a1
  79.     move.w    (a0),d1            ;check word 0
  80.     andi.w    #$0f,d1            ;for divisibility
  81.     cmpi.w    #$0c,d1            ;by $C
  82.     bne    4$
  83.  
  84.     adda.w    (a0)+,a1
  85.     move.w    (-4,a1),d2        ;check 2 identical bytes
  86.     cmp.w    (a0)+,d2
  87.     bne    4$
  88.  
  89.     subq.w    #4,a0            ;back to module start again...
  90.     moveq    #0,d2            ;...
  91.     move.l    d2,a1            ;...to check mod length!
  92.     add.w    (a0)+,a1            ;add length of inst table
  93.     move.l    a1,d1            ;save for counter
  94.     subi.w    #$0c,d1            ;fix
  95.     lsr.l    #4,d1            ;fix
  96.     subq.w    #1,d1            ;-> # of instrument entries
  97.     moveq    #3-1,d3            ;3 words to add
  98. 5$    move.w    (a0)+,d2            ;add in position table length
  99.     add.l    d2,a1            ;and offset and pattern table
  100.     dbf    d3,5$            ;lengths
  101.     addq.w    #6,a0            ;jump to first inst length
  102. 3$    moveq    #0,d2            ;clear
  103.     move.w    (a0),d2            ;fetch inst length
  104.     add.l    d2,d2            ;...add length
  105.     add.l    d2,a1            ;...and add to sum to get bytes
  106.     addi.w    #$10,a0            ;skip to next
  107.     dbra    d1,3$            ;do all instruments
  108.  
  109.     move.l    (dtg_ChkSize,a5),d1    ;size of loaded module from DT
  110.     move.l    d1,d2            ;save
  111.     sub.l    #1024,d1            ;-1k ... adjust if necessary
  112.     add.l    #1024,d2            ;+1k ... adjust if necessary
  113.     cmp.l    d1,a1            ;check it
  114.     blt    4$                ;too small!
  115.     cmp.l    d2,a1            ;check it
  116.     bgt    4$                ;too big!
  117.     rts                    ;ok!
  118. 4$    moveq    #-1,d0            ;fail!
  119.     rts                    ;gone!
  120.  
  121. interrupt    movem.l    d0-d7/a0-a6,-(sp)    ;save all since an
  122.     bsr    np_music
  123.     movem.l    (sp)+,d0-d7/a0-a6    ;interrupt calls this
  124.     rts
  125.  
  126. initplayer    moveq    #0,d0
  127.     movea.l    (dtg_GetListData,a5),a0
  128.     jsr    (a0)
  129.     move.l    a0,(np_data)
  130.     move.w    (2,a0),(patterns)
  131.     move.l    a5,(DTbase)        ;save for later toying
  132.     movea.l    (dtg_AudioAlloc,a5),a0
  133.     jsr    (a0)
  134.     rts
  135.  
  136. endplayer    movea.l    (dtg_AudioFree,a5),a0
  137.     jsr    (a0)
  138.     rts
  139.  
  140. initsound    bsr    np_init
  141.     rts
  142.  
  143. endsound    moveq    #32-1,d0            ;clear dma data
  144.     lea    (np_voidat1),a0
  145. 6$    clr.l    (a0)+
  146.     dbra    d0,6$
  147.     movea.l    (np_data),a0
  148.     move.w    (2,a0),(patterns)    ;restore pattern counter
  149.     bsr    np_end
  150.     rts
  151.  
  152. balance    nop
  153.  
  154. volume    move.w    (dtg_SndVol,a5),(mv)
  155.     move.w    (dtg_SndLBal,a5),(lv)
  156.     move.w    (dtg_SndRBal,a5),(rv)
  157.     rts
  158.  
  159.     cnop    0,4
  160.  
  161. np_data    dc.l    0
  162. DTbase    dc.l    0
  163. patterns    dc.w    0
  164. currentvol    dc.w    0
  165. mv    dc.w    0
  166. lv    dc.w    0
  167. rv    dc.w    0
  168.  
  169.     cnop    0,4
  170.  
  171. np_init    moveq    #1,d0
  172.     moveq    #0,d1
  173.     movea.l    (np_data),a4
  174.     lea    ($dff000),a5
  175.     lea    (np_datastart,pc),a6
  176.     move.l    #0,(a6)+
  177.     move.w    d0,(a6)+
  178.     movea.l    a4,a3
  179.     adda.w    (a4)+,a3
  180.     move.l    a3,(a6)+
  181.     move.w    d1,(a6)+
  182. np_ini1    adda.w    (a4)+,a3
  183.     move.l    a3,(a6)+
  184.     dbf    d0,np_ini1
  185.     move.w    (a4)+,d0
  186.     adda.l    d0,a3
  187.     move.l    #$82000006,(a6)+
  188.     move.w    #$0100,(a6)+
  189.     move.l    #np_portup,(a6)+
  190.     move.l    #np_portdown,(a6)+
  191.     move.l    #np_port,(a6)+
  192.     move.l    #np_vib,(a6)+
  193.     move.l    #np_port2,(a6)+
  194.     move.l    #np_vib2,(a6)+
  195.     move.l    #np_volslide,(a6)+
  196.     move.l    #np_arp,(a6)+
  197.     move.l    #np_songjmp,(a6)+
  198.     move.l    #np_setvol,(a6)+
  199.     move.l    #np_pattbreak,(a6)+
  200.     move.l    #np_filter,(a6)+
  201.     move.l    #np_setspeed,(a6)+
  202.     moveq    #0,d0
  203.     movea.l    a4,a6
  204.     adda.w    (-8,a4),a6
  205.     suba.w    #12,a6
  206. np_ini2    move.l    a3,(2,a4)
  207.     movea.l    a3,a2
  208.     move.w    (14,a4),d0
  209.     add.w    d0,d0
  210.     adda.l    d0,a2
  211.     move.l    a2,(8,a4)
  212.     move.w    (6,a4),d0
  213.     add.w    d0,d0
  214.     adda.l    d0,a3
  215.     adda.w    #16,a4
  216.     cmpa.l    a4,a6
  217.     bne.b    np_ini2
  218.     clr.w    ($a8,a5)
  219.     clr.w    ($b8,a5)
  220.     clr.w    ($c8,a5)
  221.     clr.w    ($d8,a5)
  222.     move.w    #$f,($96,a5)
  223.     rts
  224.  
  225. np_end    lea    ($dff000),a5
  226.     clr.w    ($a8,a5)
  227.     clr.w    ($b8,a5)
  228.     clr.w    ($c8,a5)
  229.     clr.w    ($d8,a5)
  230.     move.w    #$f,($96,a5)
  231.     rts
  232.  
  233. np_music    moveq    #0,d6
  234.     lea    ($dff0d0),a4
  235.     lea    (np_block,pc),a6
  236.     subq.w    #1,(a6)+
  237.     bhi    np_nonew
  238.     movea.l    (a6)+,a1
  239.     adda.w    (a6)+,a1
  240.     movea.l    (a6)+,a0
  241.     adda.w    (a1),a0
  242.     move.l    (a6)+,d2
  243.     movea.l    (np_data),a1
  244.     subq.w    #8,a1
  245.     lea    (np_voidat1,pc),a2
  246.     moveq    #8,d0
  247.     moveq    #0,d1
  248.     moveq    #0,d4
  249.     moveq    #0,d5
  250.  
  251. np_loop1    move.w    (a0)+,d1
  252.     tst.w    (a2)+
  253.     bpl.b    np_lop3
  254.     addq.w    #1,-(a2)
  255.     adda.w    #32,a2
  256.     addq.w    #8,a4
  257.     bra    np_lop7
  258.  
  259. np_lop3    movea.l    d2,a3
  260.     adda.l    d1,a3
  261.     adda.w    (a2),a3
  262.     move.b    (a3)+,d1
  263.     bpl.b    np_lop4
  264.     ext.w    d1
  265.     addq.w    #1,d1
  266.     addq.w    #1,(a2)
  267.     move.w    d1,-(a2)
  268.     move.w    d6,(8,a2)
  269.     adda.w    #32,a2
  270.     addq.w    #8,a4
  271.     bra    np_lop7
  272.  
  273. np_lop4    move.b    (a3)+,d3
  274.     move.b    (a3)+,d4
  275.     addq.w    #3,(a2)+
  276.     movea.l    a1,a3
  277.     move.b    d1,d7
  278.     lsl.w    #8,d7
  279.     or.b    d3,d7
  280.     andi.w    #$1f0,d7
  281.     bne.b    np_loop3
  282.     adda.w    (a2)+,a3
  283.     addq.w    #2,a2
  284.     addq.w    #2,a3
  285.     bra.b    np_loop4
  286.  
  287. np_loop3    move.w    d7,(a2)+
  288.     adda.w    d7,a3
  289.     move.w    (a3)+,(a2)+
  290. np_loop4    andi.w    #$f,d3
  291.     move.w    d3,(a2)+
  292.     move.w    d4,(a2)+
  293.     andi.w    #$fe,d1
  294.     beq.b    np_loop5
  295.     move.w    (np_periods-2,pc,d1.w),d7
  296.     subq.w    #3,d3
  297.     beq    np_setport
  298.     subq.w    #2,d3
  299.     beq    np_setport
  300.     or.w    d0,d5
  301.     move.w    d7,(a2)+
  302.     move.w    d1,(a2)+
  303.     move.w    d6,(a2)+
  304.     move.l    (a3)+,(a4)+
  305.     move.w    (a3)+,(a4)+
  306.     move.l    (a3)+,(a2)+
  307.     move.w    (a3)+,(a2)+
  308.     subq.w    #6,d3
  309.     bmi.b    np_loop6
  310.     add.w    d3,d3
  311.     add.w    d3,d3
  312.     movea.l    (38,a6,d3.w),a3
  313.     jmp    (a3)
  314.  
  315. np_loop5    adda.w    #12,a2
  316.     addq.w    #6,a4
  317.     subi.w    #11,d3
  318.     bmi.b    np_loop6
  319.     add.w    d3,d3
  320.     add.w    d3,d3
  321.     movea.l    (38,a6,d3.w),a3
  322.     jmp    (a3)
  323.  
  324. np_periods    dc.w    $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a
  325.     dc.w    $01fc,$01e0,$01c5,$01ac,$0194,$017d,$0168,$0153,$0140
  326.     dc.w    $012e,$011d,$010d,$00fe,$00f0,$00e2,$00d6,$00ca,$00be
  327.     dc.w    $00b4,$00aa,$00a0,$0097,$008f,$0087,$007f,$0078,$0071
  328.  
  329. np_loop6    move.w    (-12,a2),(a4)+
  330. np_loop7    move.w    (-18,a2),(currentvol)
  331.     bsr    dofix
  332.     addq.w    #8,a2
  333.     bra    passvolfix
  334.  
  335. np_lop7    move.w    (-26,a2),(currentvol)
  336.     bsr    dofix
  337.  
  338. passvolfix    suba.w    #$18,a4
  339.     lsr.w    #1,d0
  340.     bne    np_loop1
  341.     move.w    d5,(6,a4)
  342.     or.w    d5,(a6)+
  343.     move.w    (a6)+,(-20,a6)
  344.     bsr    waitdma
  345.     move.w    (np_block+16,pc),($dff096)
  346.     bsr    waitdma
  347.     bset    #0,(a6)+
  348.     beq.b    np_break
  349.     addq.b    #1,(a6)
  350.     cmpi.b    #64,(a6)
  351.     bne.b    np_next
  352.  
  353. np_break    subq.w    #1,(patterns)        ;done 1 pattern
  354.     bsr    np_checkend
  355.     move.b    d6,(a6)
  356.     move.l    d6,(-32,a2)
  357.     move.l    d6,(-64,a2)
  358.     move.l    d6,(-96,a2)
  359.     move.l    d6,(-128,a2)
  360.     lea    (np_block+2,pc),a6
  361.     movea.l    (a6)+,a0
  362.     addq.w    #2,(a6)
  363.     move.w    (a6),d0
  364.     cmp.w    (-4,a0),d0
  365.     bne.b    np_next
  366.     move.w    (-2,a0),(a6)
  367. np_next    move.l    (np_voidat1+18,pc),($dff0d0)
  368.     move.w    (np_voidat1+22,pc),($dff0d4)
  369.     move.l    (np_voidat1+50,pc),($dff0c0)
  370.     move.w    (np_voidat1+54,pc),($dff0c4)
  371.     move.l    (np_voidat1+82,pc),($dff0b0)
  372.     move.w    (np_voidat1+86,pc),($dff0b4)
  373.     move.l    (np_voidat1+114,pc),($dff0a0)
  374.     move.w    (np_voidat1+118,pc),($dff0a4)
  375.     rts
  376.  
  377. np_checkend    bpl    np_notdone
  378.     movem.l    a0/a5,-(sp)        ;done patterns?
  379.     move.l    (DTbase),a5        ;yes!
  380.     movea.l    (dtg_SongEnd,a5),a0
  381.     jsr    (a0)                ;inform DT
  382.     movem.l    (sp)+,a0/a5
  383. np_notdone    rts
  384.  
  385. np_setvol    move.w    d4,(-18,a2)
  386.     bra.w    np_loop6
  387.  
  388. np_pattbreak    move.b    d6,(4,a6)
  389.     bra.w    np_loop6
  390.  
  391. np_songjmp    move.b    #63,(5,a6)
  392.     move.b    d4,(-9,a6)
  393.     bra.w    np_loop6
  394.  
  395. np_setspeed    move.w    d4,(2,a6)
  396.     bra    np_loop6
  397.  
  398. np_filter
  399. *    andi.b    #$fd,($bfe001)
  400. *    or.b    d4,($bfe001)
  401.     bra    np_loop6
  402.  
  403. np_setport    adda.w    #12,a2
  404.     addq.w    #8,a4
  405.     cmp.w    (-12,a2),d7
  406.     slt    (a2)
  407.     beq.b    np_clear
  408.     move.w    d7,(2,a2)
  409.     bra    np_loop7
  410.  
  411. np_clear    move.w    d6,(2,a2)
  412.     bra    np_loop7
  413.  
  414. np_nonew    lea    (np_voidat1,pc),a0
  415.     moveq    #3,d0
  416. np_lop1    move.w    (8,a0),d1
  417.     beq.w    np_lop2
  418.     subq.w    #8,d1
  419.     bhi.w    np_lop2
  420.     addq.w    #7,d1
  421.     add.w    d1,d1
  422.     add.w    d1,d1
  423.     movea.l    (20,a6,d1.w),a3
  424.     jmp    (a3)
  425.  
  426. np_lop2    adda.w    #32,a0
  427.     suba.w    #$10,a4
  428.     dbf    d0,np_lop1
  429.     rts
  430.  
  431. np_portup    move.w    (10,a0),d2
  432.     sub.w    d2,(12,a0)
  433.     cmpi.w    #$71,(12,a0)
  434.     bpl.b    np_portup2
  435.     move.w    #$71,(12,a0)
  436.  
  437. np_portup2    move.w    (12,a0),(6,a4)
  438.     bra.b    np_lop2
  439.  
  440. np_portdown    move.w    (10,a0),d2
  441.     add.w    d2,(12,a0)
  442.     cmpi.w    #$358,(12,a0)
  443.     bmi.b    np_portdown2
  444.     move.w    #$358,(12,a0)
  445.  
  446. np_portdown2    move.w    (12,a0),(6,a4)
  447.     bra.b    np_lop2
  448.  
  449. np_arp    move.w    (-2,a6),d2
  450.     sub.w    (16,a6),d2
  451.     neg.w    d2
  452.     move.b    (np_arplist,pc,d2.w),d2
  453.     beq.b    np_arp0
  454.     subq.w    #2,d2
  455.     beq.b    np_arp2
  456.  
  457. np_arp1    move.w    (10,a0),d2
  458.     lsr.w    #3,d2
  459.     andi.w    #$e,d2
  460.     bra.b    np_arp3
  461.  
  462. np_arp2    move.w    (10,a0),d2
  463.     andi.w    #$f,d2
  464.     add.w    d2,d2
  465. np_arp3    add.w    (14,a0),d2
  466.     cmpi.w    #$48,d2
  467.     bls.b    np_arp4
  468.     moveq    #$48,d2
  469. np_arp4    lea    (np_periods-2,pc),a3
  470.     move.w    (a3,d2.w),(6,a4)
  471.     bra    np_lop2
  472.  
  473. np_arp0    move.w    (12,a0),(6,a4)
  474.     bra    np_lop2
  475.  
  476. np_arplist    dc.b 0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1
  477. np_sin    dc.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  478.     dc.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  479.  
  480. np_vib    move.w    (10,a0),d3
  481.     beq.b    np_vib2
  482.     move.w    d3,(30,a0)
  483. np_vib2    move.w    (16,a0),d3
  484.     lsr.w    #2,d3
  485.     andi.w    #$1f,d3
  486.     moveq    #0,d2
  487.     move.b    (np_sin,pc,d3.w),d2
  488.     move.w    (30,a0),d3
  489.     andi.w    #$f,d3
  490.     mulu.w    d3,d2
  491.     lsr.w    #7,d2
  492.     move.w    (12,a0),d3
  493.     tst.b    (17,a0)
  494.     bmi.b    np_vibsub
  495.     add.w    d2,d3
  496.     bra.b    np_vib3
  497.  
  498. np_vibsub    sub.w    d2,d3
  499. np_vib3    move.w    d3,(6,a4)
  500.     move.w    (30,a0),d3
  501.     lsr.w    #2,d3
  502.     andi.w    #$3c,d3
  503.     add.b    d3,(17,a0)
  504.     cmpi.b    #20,d1
  505.     bne    np_lop2
  506.  
  507. np_volslide    move.w    (10,a0),d2
  508.     add.b    d2,(7,a0)
  509.     bmi.b    np_vol3
  510.     cmpi.w    #$40,(6,a0)
  511.     bmi.b    np_vol2
  512.     move.w    #$40,(6,a0)
  513. np_vol2    move.w    (6,a0),(currentvol)
  514.     bsr    dofix
  515.     bra    np_lop2
  516.  
  517. np_vol3    move.w    d6,(6,a0)
  518.     move.w    d6,(currentvol)
  519.     bsr    dofix
  520.     bra    np_lop2
  521.  
  522. np_port    move.w    (10,a0),d2
  523.     beq.b    np_port2
  524.     move.w    d2,(28,a0)
  525. np_port2    move.w    (26,a0),d2
  526.     beq.b    np_rts
  527.     move.w    (28,a0),d3
  528.     tst.w    (24,a0)
  529.     bne.b    np_sub
  530.     add.w    d3,(12,a0)
  531.     cmp.w    (12,a0),d2
  532.     bgt.b    np_portok
  533.     move.w    d2,(12,a0)
  534.     move.w    d6,(26,a0)
  535. np_portok    move.w    (12,a0),(6,a4)
  536. np_rts    cmpi.b    #16,d1
  537.     beq.b    np_volslide
  538.     bra    np_lop2
  539.  
  540. np_sub    sub.w    d3,(12,a0)
  541.     cmp.w    (12,a0),d2
  542.     blt.b    np_portok
  543.     move.w    d2,(12,a0)
  544.     move.w    d6,(26,a0)
  545.     move.w    (12,a0),(6,a4)
  546.     cmpi.b    #16,d1
  547.     beq    np_volslide
  548.     bra    np_lop2
  549.  
  550. waitdma    movem.l    d0-d1,-(sp)
  551.     moveq    #7,d0
  552. dlp1    move.b    ($dff006),d1
  553. dlp2    cmp.b    ($dff006),d1
  554.     beq    dlp2
  555.     dbra    d0,dlp1
  556.     movem.l    (sp)+,d0-d1
  557.     rts    
  558.  
  559. dofix    movem.l    d1,-(sp)
  560.     move.l    a4,d1
  561.     cmpi.b    #$d8,d1
  562.     beq    fixleft
  563.     cmpi.b    #$d0,d1
  564.     beq    fixleft
  565.     cmpi.b    #$c8,d1
  566.     beq    fixright
  567.     cmpi.b    #$c0,d1
  568.     beq    fixright
  569.     cmpi.b    #$b8,d1
  570.     beq    fixright
  571.     cmpi.b    #$b0,d1
  572.     beq    fixright
  573.  
  574. fixleft    movem.l    d0,-(sp)
  575.     moveq    #0,d0
  576.     move.w    (currentvol),d0
  577.     mulu.w    (lv),d0
  578.     bra    divide
  579.  
  580. fixright    movem.l    d0,-(sp)
  581.     moveq    #0,d0
  582.     move.w    (currentvol),d0
  583.     mulu.w    (rv),d0
  584. divide    mulu.w    (mv),d0    
  585.     lsl.l    #4,d0
  586.     swap.w    d0
  587.     btst.l    #3,d1
  588.     bne    fixsave
  589.     move.w    d0,(8,a4)
  590.     bra    getout
  591. fixsave    move.w    d0,(a4)
  592. getout    movem.l    (sp)+,d0
  593.     movem.l    (sp)+,d1
  594.     rts
  595.  
  596. np_datastart    dc.l    0
  597. np_block    dcb.l    19,0
  598. np_voidat1    dcb.l    32,0
  599. pad    dc.l    0
  600.     END
  601.